#include <io.h>
#include <interrupt.h>
#include <signal.h>


#define PHASE_A	(PINC & 1<<PINC0)	// PINC.0
#define PHASE_B (PINC & 1<<PINC1)	// PINC.1





int main( void )
{
  TCCR0 = 1<<CS01;			//divide by 8 * 256
  TIMSK = 1<<TOIE0;			//enable timer interrupt

  DDRB = 0xFF;
  sei();
  for(;;)				// main loop
    PORTB = enc_delta;
}


SIGNAL (SIG_OVERFLOW0)
{
  static char enc_last = 0x01;
  char i = 0;

  if( PHASE_A )
    i = 1;

  if( PHASE_B )
    i ^= 3;				// convert gray to binary

  i -= enc_last;			// difference new - last

  if( i & 1 ){				// bit 0 = value (1)
    enc_last += i;			// store new as next last

    enc_delta += (i & 2) - 1;		// bit 1 = direction (+/-)
  }
}
